#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdlib.h>
#include <sys/wait.h>


// 创建一个子进程， 父进程发送SIGUSR1信号， 并使用自定义的处理方式（信号处理函数）
void receive_signal(int sig) {
    printf("Received signal %s\n", strsignal(sig));
}
int main(int argc, char const *argv[])
{
    pid_t pid;
    /* code */
    // signal 关联SIGUSR1信号和自定义的处理方式
    if(signal(SIGUSR1, receive_signal) == SIG_ERR ) {
        perror("signal error \n" );
        exit(EXIT_FAILURE);
    }
    pid = fork();
    if (pid == 0) {
        printf("child process : %d start \n", getpid());
       pause(); // 等待信号唤醒
       printf("child process : %d end \n", getpid());
       exit(EXIT_SUCCESS);
    } else if (pid > 0){
       sleep(1);
       printf("parent process : %d start \n", getpid());
       printf("pid = %d \n", pid);
       kill(pid, SIGUSR1); // 给子进程发送SIGUSR1信号
       wait(NULL); // 等待子进程退出

    }
    return 0;
}
